package persistencia;

import bitclub.Articulo;
import bitclub.Pelicula;
import bitclub.Tarifa;
import bitclub.Videojuego;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Bit Company
 */
public class PArticulo {

    /**
     * Obtiene de la base de datos la película cuyo código es el seleccionado
     * @return Pelicula
     */
    public static Articulo seleccionarPorIdBD(int id) {
        Articulo articulo=null;
        
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            String sql = "SELECT ID, TITULO, GENERO, ANO, CLASIFICACION, DURACION, FORMATO, INTERPRETES, NACIONALIDAD, PLATAFORMA, PRODUCTORA, FECHA_ALTA, FECHA_BAJA, TARIFA_ID, PROVEEDOR_ID, V_ALQUILADA, DISPONIBLE, ACTIVO, ISPELICULA FROM ARTICULOS WHERE ID =" + id;
            
            resultSet = statement.executeQuery(sql);

            if (resultSet.next()) {

                if(resultSet.getInt("isPelicula")==1){
                    Pelicula pelicula = new Pelicula();
                    pelicula.setDuracion(resultSet.getInt("duracion"));
                    pelicula.setFormato(resultSet.getString("formato"));
                    pelicula.setInterpretes(resultSet.getString("interpretes"));
                    pelicula.setNacionalidad(resultSet.getString("nacionalidad"));
                    articulo=pelicula;
                }else{
                    Videojuego videojuego= new Videojuego();
                    videojuego.setPlataforma(resultSet.getString("plataforma"));
                    videojuego.setProductora(resultSet.getString("productora"));
                    articulo=videojuego;
                }
                
                articulo.setId(resultSet.getInt("id"));
                articulo.setTitulo(resultSet.getString("titulo"));
                articulo.setGenero(resultSet.getString("genero"));
                articulo.setAno(resultSet.getInt("ano"));
                articulo.setClasificacionEdad(resultSet.getInt("clasificacion"));
                articulo.setFechaAlta(dateFormat.parse(resultSet.getString("fecha_alta")));
                if (resultSet.getString("fecha_baja") == null) {
                    articulo.setFechaBaja(null);
                } else {
                    articulo.setFechaBaja(dateFormat.parse(resultSet.getString("fecha_baja")));
                }
                articulo.setVecesAlquilada(resultSet.getInt("v_alquilada"));

                // LLamamos a la clase de persistencia de PTarifa y PProveedor.
                articulo.setTarifa(PTarifa.seleccionarPorIdBD(resultSet.getInt("tarifa_id")));
                int idProveedor = resultSet.getInt("proveedor_id");
                if (idProveedor != -1) {
                    articulo.setProveedor(PProveedor.seleccionarPorIdBD(idProveedor));
                } else {
                    articulo.setProveedor(null);
                }

                //Los siguientes campos son boolean
                if (resultSet.getInt("disponible") == 1) {
                    articulo.setDisponible(true);
                } else {
                    articulo.setDisponible(false);
                }

                if (resultSet.getInt("activo") == 1) {
                    articulo.setActivo(true);
                } else {
                    articulo.setActivo(false);
                }

            }

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
        
        return articulo;
    }



    /**
     * Obtiene de la base de datos una lista de películas que tienen cierta tarifa
     * @return Lista<Pelicula>
     */
    public static List<Articulo> seleccionarPorTarifaBD(Tarifa tarifa) {
        List<Articulo> listArticulo = new ArrayList();
        
        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(PDatos.baseDatos, PDatos.usuario, PDatos.password);
            statement = connection.createStatement();

            String sql = "SELECT ID, TITULO, GENERO, ANO, CLASIFICACION, DURACION, FORMATO, INTERPRETES, NACIONALIDAD, FECHA_ALTA, FECHA_BAJA, TARIFA_ID, PROVEEDOR_ID, V_ALQUILADA, DISPONIBLE, ACTIVO, ISPELICULA FROM ARTICULOS WHERE TARIFA_ID = " + tarifa.getId();
            
            resultSet = statement.executeQuery(sql);

            while (resultSet.next()) {
                Articulo articulo=null;
                
                if(resultSet.getInt("isPelicula")==1){
                    Pelicula pelicula = new Pelicula();
                    pelicula.setDuracion(resultSet.getInt("duracion"));
                    pelicula.setFormato(resultSet.getString("formato"));
                    pelicula.setInterpretes(resultSet.getString("interpretes"));
                    pelicula.setNacionalidad(resultSet.getString("nacionalidad"));
                    articulo=pelicula;
                }else{
                    Videojuego videojuego= new Videojuego();
                    videojuego.setPlataforma(resultSet.getString("plataforma"));
                    videojuego.setProductora(resultSet.getString("productora"));
                    articulo=videojuego;
                }
                
                articulo.setId(resultSet.getInt("id"));
                articulo.setTitulo(resultSet.getString("titulo"));
                articulo.setGenero(resultSet.getString("genero"));
                articulo.setAno(resultSet.getInt("ano"));
                articulo.setClasificacionEdad(resultSet.getInt("clasificacion"));
                articulo.setFechaAlta(dateFormat.parse(resultSet.getString("fecha_alta")));
                if (resultSet.getString("fecha_baja") == null) {
                    articulo.setFechaBaja(null);
                } else {
                    articulo.setFechaBaja(dateFormat.parse(resultSet.getString("fecha_baja")));
                }
                articulo.setVecesAlquilada(resultSet.getInt("v_alquilada"));

                // LLamamos a la clase de persistencia de PTarifa y PProveedor.
                articulo.setTarifa(PTarifa.seleccionarPorIdBD(resultSet.getInt("tarifa_id")));
                int idProveedor = resultSet.getInt("proveedor_id");
                if (idProveedor != -1) {
                    articulo.setProveedor(PProveedor.seleccionarPorIdBD(idProveedor));
                } else {
                    articulo.setProveedor(null);
                }

                //Los siguientes campos son boolean
                if (resultSet.getInt("disponible") == 1) {
                    articulo.setDisponible(true);
                } else {
                    articulo.setDisponible(false);
                }

                if (resultSet.getInt("activo") == 1) {
                    articulo.setActivo(true);
                } else {
                    articulo.setActivo(false);
                }
                
                listArticulo.add(articulo);

            }

        } catch (Exception ex) {
            System.out.println(ex.toString());
        } finally {
            try {
                resultSet.close();
                statement.close();
                connection.close();
            } catch (Exception ex) {
                System.out.println(ex.toString());
            }
        }
        
        return listArticulo;
    }
    
}
